const logger = require('../utils/logger');

/**
 * 授权中间件，检查用户是否有指定的权限
 * @param {string[]} requiredPermissions - 需要的权限列表
 * @returns {Function} Express中间件
 */
const authorize = (requiredPermissions) => {
  return (req, res, next) => {
    try {
      // 用户必须已通过身份验证
      if (!req.user) {
        logger.warn('尝试在未认证的情况下访问需授权的资源');
        return res.status(401).json({
          error: 401,
          body: null,
          message: '请先登录'
        });
      }

      logger.info(`检查用户权限: ${JSON.stringify(requiredPermissions)}`);
      logger.info(`用户拥有的权限: ${JSON.stringify(req.user.permissions || [])}`);
      
      // 检查是否有超级权限 'all'
      const hasAllPermission = req.user.permissions && 
                              req.user.permissions.includes('all');
      
      if (hasAllPermission) {
        logger.info('用户拥有超级权限(all)，授权通过');
        return next();
      }

      // 检查是否有所需的每个权限
      const hasRequiredPermissions = requiredPermissions.every(
        (permission) => req.user.permissions && req.user.permissions.includes(permission)
      );

      if (!hasRequiredPermissions) {
        logger.warn(`授权失败: 用户缺少所需权限 ${JSON.stringify(requiredPermissions)}`);
        return res.status(403).json({
          error: 403,
          body: null,
          message: '无权限执行此操作'
        });
      }

      logger.info('授权通过');
      next();
    } catch (error) {
      logger.error(`授权过程中发生错误: ${error.message}`);
      next(error);
    }
  };
};

module.exports = {
  authorize
}; 